Cette section fait un point rapide sur les fonctionnalités et les conventions du langage XML.
Composantes d'un document XML
Un document XML se compose des parties suivantes, dans l'ordre :
Déclaration XML
La déclaration XML, si elle est incluse, doit figurer à la première ligne du document XML. Elle indique la version de l'XML à laquelle le document adhère et si le fichier comprend une quelconque référence à d'autres fichiers. Par exemple :
<?xml version="1.0" standalone="no"?>Déclaration DOCTYPE (y compris la DTD)
La déclaration DOCTYPE qui spécifie la DTD du document se place après la déclaration XML et précéder la balise ouvrante de l'élément-racine. Toute DTD peut se composer de deux parties éventuelles : le sous-groupe externe et le sous-groupe interne. Si un document ne possède qu'un sous-groupe externe, il se présente comme suit:
<?xml version="1.0" standalone="no">Si un document ne possède qu'un sous-groupe interne, il se présente comme suit :
<?xml version="1.0" standalone="yes">Si un document possède à la fois des sous-groupes externe et interne, il se présente comme suit :
<?xml version="1.0" standalone="no">Éléments
Un élément se compose d'une balise ouvrante (<nomBalise>), d'un contenu et d'un balise fermante (</nomBalise>) :
<nomBalise>Le contenu s'insère ici.</nomBalise>La balise vide constitue une exception ; elle peut être une balise unique dont le > est précédé d'une barre oblique / :
<baliseVide/>Tous les éléments doivent s'emboîter correctement, autrement dit, la balise ouverte en dernier lieu doit être fermée avant que toute autre balise ne puisse être fermée. Par exemple, la ligne suivante serait interdite dans un document XML du fait que la <balise2> n'est pas fermée avant la <balise1> :
<balise1><balise2>Le contenu s'insère ici.</balise1></balise2>Chaque document XML doit posséder un élément-racine contenant tous les autres éléments du document.
Les noms d'éléments distinguent les majuscules et les minuscules. Tout nom d'élément doit commencer par une lettre ou un souligné (_) ; les autres caractères du nom peuvent être des lettres, des soulignés, des nombres, des tirets et des points, mais pas des espaces ni des tabulations.
Attributs
Un élément peut contenir des attributs dans sa balise ouvrante (ou, pour les éléments vides, dans la balise unique ouvrante/fermante). Un attribut est composé d'un nom d'attribut suivi d'un signe égal, puis d'une valeur d'attribut placée entre guillemets. Par exemple :
<nomÉlément nomAttribut="valeurAttribut">Contenu</nomÉlément>Commentaires
Un commentaire se compose de texte placé entre <!-- et -->. Le contenu des commentaires doit être ignoré des processeurs XML. Les commentaires ne peuvent contenir « -- » ni d'autres commentaires.
<!-- Ceci est un commentaire. Les caractères tels que < et > sont autorisés ici. -->Instructions de traitement
Une instruction de traitement se compose de texte placé entre <? et ?>. Les instructions de traitement ne sont lues que par les processeurs XML et ne peuvent posséder de contenu. La syntaxe des instructions de traitement est la suivante :
<?instruction cible?>Références de caractère
Une référence de caractère est une manière de représenter les caractères Unicode dans les données caractères analysées. La syntaxe des références de caractère est la suivante :
&#valeurUnicodeDuCaractère;Références d'entités
Une référence d'entité est le nom qui représente un caractère, une chaîne de texte ou un fichier spécifique. Les références d'entités d'un document XML sont toujours placées entre le signe & et le point virgule (;). Par exemple, > représente un signe « supérieur à » (<), qui ne peut être inclus dans un contenu XML que sous la forme d'une référence d'entité.
La signification de chaque référence d'entité utilisée dans un document XML doit être définie dans la DTD du document, à l'exception des références d'entités de caractères prédéfinies qui suivent, qui peuvent être utilisées sans être définies :
Caractère | Référence d'entité |
< | < |
> | > |
& | & |
" | " |
' | ' |
XML bien formé
Pour être bien formé, un document XML doit observer les règles suivantes :
XML valide
Un document XML valide est un document XML bien formé et qui respecte la DTD spécifiée par sa déclaration DOCTYPE.
Cette section fait un point rapide sur les fonctionnalités et les conventions de la DTD.
Composantes d'une DTD
Une DTD peut se composer des parties suivantes, sans ordre particulier :
Déclarations de type d'élément
La syntaxe de la définition d'un type d'élément est la suivante :
<!ELEMENT nomÉlément (contenuÉlément)>Les noms d'éléments distinguent les majuscules et les minuscules. Tout nom d'élément doit commencer par une lettre ou un souligné (_) ; les autres caractères du nom peuvent être des lettres, des soulignés, des nombres, des tirets et des points, mais pas d'espaces ni de tabulations.
Le contenu de l'élément peut se composer de données caractères analysées (c'est-à-dire, du texte et des références d'entités, exprimées en tant que ) et/ou d'autres types d'éléments. Les symboles suivants peuvent être insérés après tout nom d'élément ou toute parenthèse fermante dans la définition du contenu de l'élément :
Symbole | Signification |
Aucun | Exactement un |
+ | Un ou plus |
* | Zéro ou plus |
? | Zéro ou un |
Pour exiger qu'un élément soit suivi d'un autre, utilisez une virgule :
<!ELEMENT nomÉlément (élément1, élément2)>Pour indiquer que le contenu peut inclure un élément ou l'autre, utilisez | :
<!ELEMENT nomÉlément (élément1 | élément2)>Pour permettre qu'un élément contienne une combinaison d'éléments et de #PCDATA spécifiques dans n'importe quel ordre, utilisez la syntaxe suivante :
<!ELEMENT nomÉlément (#PCDATA | élément1 | élément2)*>Pour permettre qu'un élément contienne n'importe quelle combinaison d'éléments et de #PCDATA dans n'importe quel ordre, utilisez la syntaxe suivante (remarquez l'omission des parenthèses) :
<!ELEMENT nomÉlément ANY>Pour définir un élément vide, utilisez la syntaxe suivante (remarquez l'omission des parenthèses) :
<!ELEMENT nomÉlément EMPTY>Déclarations d'attribut
La syntaxe pour la définition d'un attribut unique est la suivante :
<!ATTLIST nomÉlément nomAttribut typeAttribut valeurParDéfaut>Les noms d'attributs distinguent les majuscules et les minuscules. Chaque nom d'attribut doit commencer par une lettre ou un souligné (_) ; les autres caractères du nom peuvent être des lettres, des soulignés, des nombres, des tirets et des points, mais pas des espaces ni des tabulations.
Les types d'attributs possibles sont les suivants :
Type d'attribut | Signification |
CDATA | Données de caractères et références d'entités, entre guillemets ("") |
ID | Doit contenir un nom* unique pour chaque élément de ce type |
IDREF | Le nom* ID unique d'un élément dans le fichier XML |
ENTITY | Un nom* de référence d'entité externe non analysée défini dans la DTD |
ENTITIES | Une liste de noms d'ENTITY, séparés par des espaces |
Énuméré | Une liste entre parenthèses de noms*, séparés par des caractères |, entre parenthèses |
NMTOKEN | Une valeur ne contenant que des caractères NameChar** |
NMTOKENS | Une liste de NMTOKEN, séparés par des espaces |
NOTATION | Le nom d'une notation définie dans la DTD |
NOTATION énumérée | Une liste entre parenthèses de NOTATION, séparées par des caractères |, entre parenthèses |
*Les noms doivent commencer par une lettre ou un souligné (_) ; les autres caractères du nom peuvent être des lettres, des soulignés, des nombres, des tirets et des points, mais pas des espaces ni des tabulations.
**Les caractères NameChar comprennent les lettres, les soulignés, les nombres, les tirets ou les points, mais pas les espaces ni les tabulations.
Les valeurs d'attribut par défaut peuvent être les suivantes :
Type d'attribut | Signification |
#REQUIRED | Cet attribut doit être précisé par l'élément |
#IMPLIED | Cet attribut peut être utilisé ou non |
valeur #FIXED | S'il n'est pas précisé, cet attribut est supposé être valeur ; s'il l'est, il doit être valeur |
valeurParDéfaut | S'il n'est pas précisé, cet attribut est supposé être valeurParDéfaut |
Commentaires
Un commentaire se compose de texte placé entre <!-- et -->. Le contenu des commentaires doit être ignoré des processeurs XML. Les commentaires ne peuvent contenir « -- » ni d'autres commentaires.
<!-- Ceci est un commentaire. Les caractères tels que < et > sont autorisés ici. -->Références de caractères
Une référence de caractère est une manière de représenter les caractères Unicode dans les données caractères analysées. La syntaxe des références de caractère est la suivante :
&#valeurUnicodeDeCaractère;Déclarations de références d'entités
On distingue cinq types d'entités. La syntaxe de leur déclaration est la suivante :
Type | Syntaxe |
Analysées internes | <!ENTITY nomEntité "texte de l'entité"> |
Analysées externes | <!ENTITY nomEntité SYSTEM "URL du fichier"> OU <!ENTITY nomEntité PUBLIC "nom du fichier" "URL du fichier"> |
Externes non analysées | <!ENTITY nomEntité SYSTEM "URL du fichier" NDATA nomNotation> OU <!ENTITY nomEntité PUBLIC "nom du fichier" "URL du fichier" NDATA nomNotation> |
Paramétrées internes | <!ENTITY % nomEntité "texte de l'entité"> |
Paramétrées externes | <!ENTITY % nomEntité SYSTEM "URL du fichier"> OU <!ENTITY % nomEntité PUBLIC "nom du fichier" "URL du fichier"> |
La syntaxe pour l'utilisation des trois premiers types de références d'entités est &nomEntité;. La syntaxe pour l'utilisation de l'entité paramétrée est nomEntité;. Les références d'entités paramétrées sont toujours analysées et ne peuvent être utilisées que dans une DTD.
Déclarations de notations
Les déclarations de notations devraient être définies de l'une des deux manières suivantes :
<!NOTATION nomNotation SYSTEM "Identificateur externe">L'identificateur externe devrait être le nom d'une application capable de traiter ou d'afficher les fichiers auxquels cette notation s'applique. Par exemple :
<!NOTATION gif SYSTEM "Microsoft Internet Explorer">Remarquez qu'il appartient à l'application qui traite l'XML de transférer l'URL à l'application indiquée par l'identificateur externe.
Instructions de traitement
Une instruction de traitement se compose de texte placé entre <? et ?>. Les instructions de traitement ne sont lues que par les processeurs XML et ne peuvent posséder de contenu. La syntaxe des instructions de traitement est la suivante :
<?instruction cible?>Supposons que vous venez d'exporter un fichier XML d'avenue.quark et qu'en le consultant à l'aide de votre éditeur de texte, vous constatiez un « à » à la place du symbole de marque. En réalité, bon nombre de vos symboles spéciaux semblent incorrects. Que s'est-il passé ?
Votre éditeur de texte n'est probablement pas compatible avec le codage utilisé par votre fichier XML. Cette section explique le sujet en détail.
Qu'est-ce qu'un codage?
Un codage est une spécification qui lie une série de caractères aux valeurs numériques correspondantes. Par exemple, le codage ASCII lie le caractère « M » à la valeur numérique 77, « N » à 78, « O » à 79, etc.
Le codage d'un fichier de texte permet au programme de traduire le fichier de texte dans les caractères adéquats à l'écran. Sans le codage, le fichier de texte n'est qu'un flot de nombres. Si vous affichez un fichier de texte à l'aide du mauvais codage, vous verrez probablement des données parasites, car l'application ouvrant le fichier liera les valeurs numériques au mauvais jeu de caractères.
Exemples de codages :
Avenue.quark gère les codages UTF-8, UTF-16 et Shift-JIS.
Gammes inférieure et supérieure de caractères
La plupart des codages peuvent être divisés en deux parties : les 127 premiers caractères (la gamme inférieure) et tous les caractères suivants (la gamme supérieure).
En règle générale, la gamme inférieure de la plupart des codages est liée aux mêmes caractères. Cette gamme comprend les caractères a-z, A-Z, 0-9, une poignée de caractères de ponctuation, ainsi que certains caractères de contrôle spéciaux.
Les problèmes commencent lorsque vous passez dans la gamme supérieure. MacRoman et Windows Latin 1, par exemple, ont des gammes inférieures relativement identiques. Donc, si vous prenez un fichier n'utilisant que des caractères de cette gamme et que vous le transférez de Mac OS vers Windows, il semblera bon. Mais si le fichier contient des caractères de la gamme supérieure, vous pourriez obtenir des résultats bizarres, car de nombreuses valeurs de la gamme supérieure sont liées à des caractères différents sur chaque plate-forme. À titre d'exemple, un caractère qui s'affiche comme un symbole de marque sous Mac OS peut apparaître comme un a minuscule en exposant sous Windows.
L'affichage incorrect des caractères est dû au fait que l'application qui affiche le texte soit ne connaît pas le codage de ce texte, soit est incapable d'afficher correctement le texte avec le codage spécifié du fichier.
Spécification des codages
Vous pouvez indiquer le codage d'un fichier XML en incluant une spécification de codage dans la déclaration XML du fichier, comme suit :
<?xml version="1.0" standalone="yes" encoding="Shift_JIS"?>Si un fichier XML ne contient aucune spécification de codage, avenue.quark suppose que le fichier utilise le codage UTF-8.
À l'enregistrement du fichier XML dans avenue.quark, vous précisez le codage du document à l'aide du menu contextuel Codage et avenue.quark génère automatiquement l'attribut de codage approprié.
Codages et DTD
XML vous permet de préciser le codage d'un fichier XML. Par contre, il n'offre pas la possibilité de préciser le codage d'un fichier de DTD autonome.
Heureusement, avenue.quark le permet. Pour préciser le codage d'une DTD autonome, il suffit d'ajouter le texte suivant en première ligne du fichier:
<? xml encoding="encodingName" ?>Pour préciser, par exemple, qu'une DTD autonome est en UTF-16, ajoutez simplement la ligne suivante au début du fichier :
<? xml encoding="UTF-16" ?>